八、應用層
物聯網應用相當多元,所以在應用層也要有一些協定,讓應用能有些彈性來和無線接取層配合,主要協定有三個:HTTP、CoAP、MQTT,它們有的建立在TCP、有的建立在UDP上,如果中間傳輸時有加密,在TCP用的協定是SSL或TLS,在UDP用的則是DTLS
第一個協定HTTP(HyperText Transfer Protocol):
為最常用的應用層協定,如:電腦/手機瀏覽器與伺服器、手機上的APP與後端程式等之間的溝通。它原本只是為了抓取網頁上靜態內容產生的協定,要抓取網路上某一頁面、影像或聲音要透過URI(Uniform Resource Identifiers)去做辨識,再從伺服器端抓到瀏覽器端,而瀏覽器裡使用的網址URL(Uniform Resource Locator)裡可能有很多的資源,每一個資源都是一個URI,可以單獨標示。HTTP是主從式運作,它的傳輸層協定為TCP,所以會建立一個可靠的連結,在發送請求前,瀏覽器端會先建立一個(Port80)的TCP連線到伺服器端,然後再送出請求(Request Message)。伺服器端會監聽是否有連結請求,一旦收到請求伺服器端便會向瀏覽器端發送回覆(Response Message),內容會有狀態(ex:HTTP/1.1 200OK)及相關內容(請求的資源、錯誤訊息)。
Request Message:
範例:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
第一行是請求方法,第二行是Host就是網址,第三行以下是表頭列User-Agent,說的是使用的瀏覽器、接受的語言及編碼等等,訊息會擺在最後的Entity Body,如果訊息少也可能直接呈現在網址列,如果是https表示傳輸過程有加密,下面用的協定是SSL或TLS
Request Method:
• GET - 向伺服器發出讀取指定資料的請求,Entity Body是空的,在網址後端可能會加一些資訊在表頭上傳給後端
• POST - 除了向伺服器提交資料,還請求伺服器來處理資料,資料會被放在Entity Body
• DELETE - 請求伺服器刪除指定標示的資料或資源
• PUT - 請求伺服器在特定位置新增資源或接收到的資料
• CRUD(Create/Read/Update/Delete) - 新增/查詢/更改/刪除
另外有兩個技術基於上述的方法被開發出來
• Web Services - 後端伺服器之間要做CRUD會透過GET、POST、DELETE、PUT來達成
• REST(Representational State Transfer) API - 寫程式向Web伺服器做CRUD的動作
Response Message:
範例:
HTTP/1.1 200 OK
Connection: close
Date: Tue, 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
第一行是狀態列,第三行是日期,第四行描述伺服器的功能等,接下來就是很多Header Line,最下面為網頁的部分,其中,Header裡有一個Last-Modified指傳輸給瀏覽器的內容上一次更新的時間,瀏覽器端就能暫存起來,不須再次傳輸,只需檢示新的版本
範例與圖片來源:Computer Networking - A Top-Down Approach, 7th Ed., by Kurose & Ross
參考資料
https://www.youtube.com/watch?v=8RFBynv_U6k&list=PLdSWxzxDhd3HcpDDa8svbBrD9qRQj39bW